Client device configuration with hooks

ABSTRACT

Some embodiments include a method for configuring a client device. The method includes associating a hook in a configuration bundle with customized programming. The method includes downloading the configuration bundle for a client device to a services gateway, including downloading a generic configuration bundle to the services gateway. The method also includes executing the configuration bundle on the services gateway, including calling the hook and executing the generic configuration bundle. The executing of the generic configuration bundle further includes reading, from the client device, a configuration prompt stored on the client device, providing the configuration prompt to a user, receiving configuration parameters from the user, and writing the configuration parameters to the client device.

RELATED APPLICATIONS

This application claims the priority benefit of the U.S. patentapplication Ser. No. 11/768,063 filed Jun. 25, 2007, which iscontinuation application of and claims priority from U.S. patentapplication Ser. No. 10/361,198, filed on Feb. 6, 2003.

BACKGROUND OF THE INVENTION

The field of the invention is data processing, or, more specifically,methods, systems, and products for configuring client devices.

Often when a networked client device is purchased and installed onto anetwork, such as a home network, the client device must be configured tooperate properly. When disparate client devices using differentprotocols are networked together configuring these client devices oftenrequires configuration parameters specific to the user, the network onwhich the client device will operate, and the client device. Currentconfiguration techniques are often tedious and require extensive userinvolvement. In fact, in some complicated environments, configurationrequires a truck roll with a technical installer. Many conventionalconfiguration techniques require the user to access complicated textinstructions from a home computer and wade through large amounts oftechnical data in order to complete the configuration process.Therefore, there is a need for an improved method of configuring aclient device.

SUMMARY OF THE INVENTION

Some embodiments include a method for configuring a client device. Themethod includes associating a hook in a configuration bundle withcustomized programming. The method includes downloading theconfiguration bundle for a client device to a services gateway,including downloading a generic configuration bundle to the servicesgateway. The method also includes executing the configuration bundle onthe services gateway, including calling the hook and executing thegeneric configuration bundle. The executing of the generic configurationbundle further includes reading, from the client device, a configurationprompt stored on the client device, providing the configuration promptto a user, receiving configuration parameters from the user, and writingthe configuration parameters to the client device.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a block diagram illustrating information handling architectureand various entities useful in implementing methods of configuring aclient device in accordance with methods of the present invention.

FIG. 2 is a data flow diagram illustrating an exemplary method ofconfiguring a client device according to the present invention.

FIG. 2 a is a data flow diagram of methods of associating customizedprogramming with a hook in a configuration bundle according to thepresent invention.

FIG. 3 is a data flow diagram illustrating methods of detecting a clientdevice and requesting an associated configuration bundle.

FIG. 4 is a data flow diagram illustrating an exemplary method ofreceiving, at a vendor, a configuration bundle and user-providedconfiguration parameters.

FIG. 5 is a data flow diagram illustrating an exemplary method ofassociating, at a vendor, a configuration bundle with user-providedconfiguration parameters.

FIG. 6 is a data flow diagram illustrating an exemplary method ofreceiving, at a configuration services provider, a configuration bundleand user-provided configuration parameters.

FIG. 7 is a data flow diagram illustrating an exemplary method ofassociating, at a configuration services provider, a configurationbundle with user-provided configuration parameters.

FIG. 8 is a data flow diagram illustrating an exemplary method ofdownloading a generic configuration and executing the genericconfiguration bundle.

FIG. 9 is a data flow diagram illustrating an exemplary method ofexecuting a generic configuration bundle.

DETAILED DESCRIPTION OF EXEMPLARY EMBODIMENTS INTRODUCTION

The present invention is described to a large extent in thisspecification in terms of methods for configuring a client device.Persons skilled in the art, however, will recognize that any computersystem that includes suitable programming means for operating inaccordance with the disclosed methods also falls well within the scopeof the present invention.

Suitable programming means include any means for directing a computersystem to execute the steps of the method of the invention, includingfor example, systems comprised of processing units and arithmetic-logiccircuits coupled to computer memory, which systems have the capabilityof storing in computer memory, which computer memory includes electroniccircuits configured to store data and program instructions, programmedsteps of the method of the invention for execution by a processing unit.The invention also may be embodied in a computer program product, suchas a diskette or other recording medium, for use with any suitable dataprocessing system.

Embodiments of a computer program product may be implemented by use ofany recording medium for machine-readable information, includingmachine-readable storage media and machine readable signal media.Machine-readable storage media are capable of storing data and mayinclude, but is not limited to, magnetic storage medium (e.g., floppydiskette); optical storage medium (e.g., CD-ROM); magneto-opticalstorage medium; read only memory (ROM); random access memory (RAM);erasable programmable memory (e.g., EPROM and EEPROM); flash memory; orother types of medium suitable for storing electronic instructions.Machine readable signal medium include electrical, optical, acousticalor other form of propagated signal (e.g., carrier waves, infraredsignals, digital signals, etc.), or wireline, wireless, or othercommunications medium. Persons skilled in the art will immediatelyrecognize that any computer system having suitable programming meanswill be capable of executing the steps of the method of the invention asembodied in a program product. Persons skilled in the art will recognizeimmediately that, although most of the exemplary embodiments describedin this specification are oriented to software installed and executingon computer hardware, nevertheless, alternative embodiments implementedas firmware or as hardware are well within the scope of the presentinvention.

DEFINITIONS

“Field”—In this specification, the terms “field” and “data element,”unless the context indicates otherwise, generally are used as synonyms,referring to individual elements of digital data. Aggregates of dataelements are referred to as “records” or “data structures.” Aggregatesof records are referred to as “tables” or “files.” Aggregates of filesor tables are referred to as “databases.” Complex data structures thatinclude member methods, functions, or software routines as well as dataelements are referred to as “classes.” Instances of classes are referredto as “objects” or “class objects.”

“802.11” refers to a family of specifications developed by the IEEE forwireless LAN technology. 802.11 specifies an over-the-air interfacebetween a wireless client and a base station or between two wirelessclients.

“API” is an abbreviation for “application programming interface.” An APIis a set of routines, protocols, and tools for building softwareapplications.

“Bluetooth” refers to an industrial specification for a short-rangeradio technology for RF couplings among client devices and betweenclient devices and resources on a LAN or other network. Anadministrative body called the Bluetooth Special Interest Group testsand qualifies devices as Bluetooth compliant. The Bluetoothspecification consists of a ‘Foundation Core,’ which provides designspecifications, and a ‘Foundation Profile,’ which providesinteroperability guidelines.

“Browser” means a web browser, a communications application for locatingand displaying web pages. Browsers typically comprise a markup languageinterpreter, web page display routines, and an HTTP communicationsclient. Typical browsers today can display text, graphics, audio andvideo. Browsers are operative in web-enabled devices, including wirelessweb-enabled devices. Browsers in wireless web-enabled devices often aredownsized browsers called “microbrowsers.” Microbrowsers in wirelessweb-enabled devices often support markup languages other than HTML,including for example, WML, the Wireless Markup Language.

“Coupled for data communications” means any form of data communications,wireless, 802.11b, Bluetooth, infrared, radio, internet protocols, HTTPprotocols, email protocols, networked, direct connections, dedicatedphone lines, dial-ups, serial connections with RS-232 (EIA232) orUniversal Serial Buses, hard-wired parallel port connections, networkconnections according to the Power Line Protocol, and other forms ofconnection for data communications as will occur to those of skill inthe art. Couplings for data communications include networked couplingsfor data communications. Examples of networks useful with variousembodiments of the invention include cable networks, intranets,extranets, internets, local area networks, wide area networks, and othernetwork arrangements as will occur to those of skill in the art. The useof any networked coupling among television channels, cable channels,video providers, telecommunications sources, and the like, is wellwithin the scope of the present invention.

“Driver” means a program that controls a device. A device (printer, diskdrive, keyboard) typically has a driver. A driver acts as translatorbetween the device and software programs that use the device. Eachdevice has a set of specialized commands that its driver knows. Softwareprograms generally access devices by using generic commands. The driver,therefore, accepts generic commands from a program and then translatesthem into specialized commands for the device.

“HAVi” stands for ‘Home Audio Video interoperability,’ the name of avendor-neutral audio-video standard particularly for home entertainmentenvironments. HAVi allows different home entertainment and communicationdevices (such as VCRs, televisions, stereos, security systems, and videomonitors) to be networked together and controlled from one primarydevice, such as a PC or television. Using IEEE 1394, the ‘Firewire’specification, as the interconnection medium, HAVi allows products fromdifferent vendors to comply with one another based on defined connectionand communication protocols and APIs. Services provided by HAVi'sdistributed application system include an addressing scheme and messagetransfer, lookup for discovering resources, posting and receiving localor remote events, and streaming and controlling isochronous datastreams.

“Homeplug” stands for The HomePlug Powerline Alliance. Homeplug is anot-for-profit corporation formed to provide a forum for the creation ofopen specifications for high speed home powerline networking productsand services. The homeplug specification is designed for delivery ofInternet communications and multimedia to homes through the home poweroutlet using powerline networking standards.

In this specification, a “hook” in a configuration bundle is a call fromwithin a configuration bundle to one or more executable softwareprograms that are not associated with the call when the call is writteninto the source code for the bundle. The executable programming may notbe associated with the call when the call was written for many reasons.For example, the executable programming may be created by an entity thatdid not manufacture the configuration bundle or the executableprogramming is written after the configuration bundle is created.

“ID” abbreviates “identification,” meaning ‘identification code’ oridentification field. It is a style of reference in this disclosure torefer to user identification codes as “user IDs.” By convention in thisdisclosure, the field name “UserID” is used to store a user ID.

“IEEE 1394” is an external bus standard that supports data transferrates of up to 400 Mbps (400 million bits per second). Productssupporting the 1394 standard go under different names, depending on thecompany. Apple, which originally developed IEEE 1394, uses thetrademarked name “Fire Wire.” Other companies use other names, such asi.link and Lynx, to describe their 1394 products.

A single 1394 port can be used to connect up 63 external devices. Inaddition to high speed, 1394 also supports isochronous data—deliveringdata at a guaranteed rate. This makes it ideal for devices that need totransfer high levels of data in real-time, such as video.

“The Internet” is a global network connecting millions of computersutilizing the ‘internet protocol’ or ‘IP’ as the network layer of theirnetworking protocol stacks. The Internet is decentralized by design.Each computer on the Internet is independent. Operators for eachcomputer on the Internet can choose which Internet services to use andwhich local services to make available to the global Internet community.There are a variety of ways to access the Internet. Many onlineservices, such as America Online, offer access to some Internetservices. It is also possible to gain access through a commercialInternet Service Provider (ISP). An “internet” (uncapialized) is anynetwork using IP as the network layer in its network protocol stack.

‘IP’ refers to the ‘internet protocol,’ a network-layer networkingprotocol for computer data communications.

“IP address” means an identifier for a computer or device on an IPnetwork. Networks using the IP protocol route messages based on the IPaddress of the destination. The format of an IP address is a 32-bitnumeric address written as four numbers separated by periods. Eachnumber can be zero to 255. An example of an IP address is 1.160.10.240.

“ISP” means “Internet Service Provider,” a company that provides accessto the Internet. For a monthly fee, an ISP provides a useridentification code (often called a ‘username’), a password, and anaccess phone number or, for wide band services, an internet protocoladdress, through which to access the Internet. Equipped with propercouplings for data communications, such as a modem or cable modem, usersand companies can then log on to the Internet, browse the World WideWeb, and access other Internet related services such as USENET ande-mail. In servings companies, ISPs also provide a direct connectionfrom the company's networks to the Internet.

“JAR” is an abbreviation for ‘Java archive.’ JAR is a file format usedto bundle components used by a Java applet. JAR files simplifydownloading applets, because many components (.class files, images,sounds, etc.) can be packaged into a single file. JAR also supports datacompression, which further decreases download times. By convention, JARfiles end with a jar extension.

“JES” stands for Java Embedded Server. JES is a commercialimplementation of OSGi that provides a framework for development,deployment, and installation of applications and services to embeddeddevices.

“JNI” is an abbreviation for Java Native Interface. JNI is a standardprogramming interface that allows Java code running in a Java VirtualMachine to operate with applications and libraries written in otherlanguages such as C, C++, or assembly language.

“LAN” is an abbreviation for “local area network.” A LAN is a computernetwork that spans a relatively small area. Many LANs are confined to asingle building or group of buildings. However, one LAN can be connectedto other LANs over any distance via telephone lines and radio waves. Asystem of LAN s connected in this way is called a wide-area network(WAN). The Internet is an example of a WAN.

“OSGI” refers to the Open Services Gateway Initiative, an industryorganization developing specifications for services gateways, includingspecifications for delivery of service bundles, software middlewareproviding compliant data communications and services through servicesgateways. The Open Services Gateway specification is a java basedapplication layer framework that gives service providers, networkoperator device makers, and appliance manufacturer's vendor neutralapplication and device layer APis and functions.

“Server” in this specification refers to a computer or device comprisingautomated computing machinery on a network that manages resources andrequests for access to resources. A “web server,” or “HTTP server,” inparticular is a server that communicates with browsers by means of HTTPin order to manage and make available to networked computers documentsin markup languages like HTML, digital objects, and other resources. A“DMS server,” in particular is a server that communicates with servicesgateways to provide service bundles to the services gateways.

“SMF” stands for “Service Management Framework™” available from IBM®.SMF is a standards-based architecture that is designed to be compliantwith specifications developed by the cross-industry Open ServicesGateway Initiative (OSGi). SMF is a commercial implementation of OSGifor management of network delivered applications on services gateways.

‘TCP’ refers to the ‘Transmission Control Protocol,’ a transport-layernetworking protocol for networked computer data communications. TCPprovides a so-called ‘reliable’ communications protocol in which amessage is broken into packets which are communicated to the message'sdestination and reassembled into the message completely and in correctsequence. TCP is so often used with IP as its underlying networkprotocol layer that the two are often spoken of together as the TCP/IPprotocol suite.

“TCP/IP” means the Transmission Control Protocol (TCP) and the InternetProtocol (IP) operating together. TCP/IP is a packet switching protocolsuite. TCP establishes a virtual connection between a data source and adata destination. IP specifies that data will be sent from the source tothe destination in packets and IP specifies the addressing scheme of thesource and the destination. TCP monitors the delivery of the data andthe order in which the packets are delivered.

“USB” is an abbreviation for “universal serial bus.” USB is an externalbus standard that supports data transfer rates of 12 Mbps. A single USBport can be used to connect up to 127 peripheral devices, such as mice,modems, and keyboards. USB also supports Plug-and-Play installation andhot plugging.

“WAP” refers to the Wireless Application Protocol, a protocol for usewith handheld wireless devices. Examples of wireless devices useful withWAP include mobile phones, pagers, two-way radios, and hand-heldcomputers. WAP supports many wireless networks, and W AP is supported bymany operating systems. Operating systems specifically engineered forhandheld devices include PalmOS, EPOC, Windows CE, FLEX OS, OS/9, andJavaOS. W AP devices that use displays and access the Internet run“microbrowsers.” The micrbrowsers use small file sizes that canaccommodate the low memory constraints of handheld devices and thelow-bandwidth constraints of wireless networks.

“World Wide Web,” or more simply “the web,” refers to a system ofinternet protocol (“IP”) servers that support specially formatteddocuments, documents formatted in markup languages such as HTML(HyperText Markup Language), XML (eXtensible Markup Language), WML(Wireless Markup Language), or HDML (Handheld Device Markup Language).The term “Web” is used in this specification also to refer to any serveror connected group or interconnected groups of servers that implement ahyperlinking protocol, such as HTTP (HyperText Transfer Protocol) or WAP(Wireless Access Protocol), in support of URIs and documents in markuplanguages, regardless of whether such servers or groups of servers arecoupled to the World Wide Web as such.

DETAILED DESCRIPTION

FIG. 1 is a block diagram illustrating an exemplary information handlingarchitecture and various entities useful in implementing methods ofconfiguring a client device in accordance with various embodiments ofthe present invention. The exemplary architecture of FIG. 1 includes aclient device (120) to be configured. A client device (120) can be anyconfigurable device, although in many typical embodiments of the presentinvention, client devices (120) are devices capable of being networkedon a LAN, such as a home network, or any other network as will occur tothose of skill in the art. Examples of client devices (120) to beconfigured include printers, a dishwasher, a DVD player, a coffeepot, orany other device that will occur to those of skill in the art.

In the exemplary architecture of FIG. 1, a client device (120) iscoupled for data communication with a services gateway (130). Theservices gateway (130) is coupled for data communication WAN (108). Theservices gateway (130) provides access for the client device (120), andany LAN on which the client device (102) is operating, to a WAN such asthe Internet.

A services gateway (130) is in some exemplary architectures an OSGicompatible services gateway (130). While exemplary embodiments ofmethods for configuring a client device are described in thisspecification using OSGi, many other applications and frameworks, willwork to implement the methods of configuring a client device accordingto the present invention, and are therefore, also well within the scopeof the present invention. Even further commercial implementations ofOSGi such as JES and SMF are also useful in implementing methods ofconfiguring client devices according to embodiments of the presentinvention.

OSGi Stands for ‘Open Services Gateway Initiative.’ The OSGispecification is a Java based application layer framework that providesvendor neutral application and device layer APis and functions forvarious devices using arbitrary communication protocols operating innetworks in homes, cars, and other environments. OSGi works with avariety of networking technologies like Ethernet, Bluetooth, the ‘Home,Audio and Video Interoperability standard’ (HAVi), IEEE 1394, UniversalSerial Bus (USB), WAP, and powerline communication systems, includingthe Home Powerline Alliance standard known as HomePlug. The OSGispecification is available for free download from the OSGi website atwww.osgi.org.

The services gateway of FIG. 1 includes a service framework (126). Inmany example embodiments the service framework is an OSGi serviceframework (126). An OSGi service framework (126) is written in Java andtherefore, typically runs on a Java Virtual Machine (NM). In OSGi, theservice framework (126) of FIG. 1 is a hosting platform for running‘services’ (124). The term ‘service’ or ‘services’ in this disclosure,depending on context, generally refers to OSGi-compliant services.

Services (124) are the main building blocks for creating applications inthe OSGi. A 20 service (124) is a group of Java classes and interfacesthat implement a certain feature. The OSGi specification provides anumber of standard services. For example, OSGi provides a standard HTTPservice that creates a web server that can respond to requests from HTTPclients.

OSGi also provides a set of standard services called the Device AccessSpecification. The Device Access Specification (“DAS”) provides servicesto identify a device connected to the services gateway, search for adriver for that device, and install the driver for the device.

Services (124) in OSGi are packaged with other files, images, andresources that the services (124) need for execution in a ‘bundle,’ suchas the bundle (121) of FIG. 1. A bundle (121) is a Java archive (JAR)file including one or more services (124), an activator class (127), anda manifest file (125). An activator class (127) is a Java class that theservice framework (126) uses to start and stop a bundle. A manifest file(125) is a standard text file that describes the contents of the bundle(121).

The services framework (126) in OSGi also includes a service registry(128). The service registry (128) includes the service's name and aninstance of a class that implements the service for each bundle (121)installed on the framework (126) and registered with the serviceregistry (128). A bundle (121) may request services that are notincluded in the bundle (121), but are registered on the frameworkservice registry (128). To find a service, a bundle (121) performs aquery on the framework's service registry (128).

The exemplary entities of FIG. 1 also include a Device Management Server(‘DMS’) (106) coupled for data communications with the services gateway(130) 20 though a WAN (1 08) such as the Internet, the World Wide Web,or any WAN. The DMS is a server specifically designed to provide,retrieve, or otherwise deploy bundles to the services gateway (130). Inmany typical examples, a DMS agent provides protocols for receivingrequests for bundles from a gateway, authenticating the gateway,retrieving a requested bundle, and providing the requested bundle to theservices gateway.

The exemplary entities of FIG. 1 include a Configuration ServicesProvider (‘CSP’) (104). A CSP (104) is a service provider that obtainsconfiguration bundles for client devices and provides them to users. Auser is a subscriber or customer of a CSP. A CSP receives configurationparameters from users. When a user or vendor notifies a CSP of thepurchase of a client device that needs to be configured, the CSP (104)provides an associated configuration bundle for the client device. Anassociated configuration bundle is a configuration bundle for the clientdevice that has within the bundle configuration parameters necessary forthe configuration on the user's services gateway (130). The CSP of FIG.1 downloads the configuration bundle to the user's services gatewaythrough a DMS. The associated configuration bundle is executed on theservices gateway to configure the client device.

The exemplary entities of FIG. 1 include a vendor (102). The vendor(102) sells or otherwise provides client devices (120) to the user. Inexamples of methods of configuring a client device, the vendor (1 02)also sells or otherwise provides to a user configuration bundles for theclient device. In some example embodiments of the present invention, thevendor obtains the configuration bundles form a manufacturer ofconfiguration bundles (132).

The exemplary entities of FIG. 1 also include a manufacturer (132). Themanufacturer (132) of FIG. 1 is a manufacturer of configuration bundlesfor use with methods of configuring a client device (120) according tothe present invention. The manufacturer (132) of configuration bundlesfor the client device is in some instances the manufacturer of theclient device (120) itself. However, the manufacturer (132) of aconfiguration bundle may be a third-party manufacturer of configurationbundles who did not manufacture the client device.

FIG. 2 is a data flow diagram illustrating a method of configuring aclient device in accordance with the present invention. The method ofFIG. 2 includes associating (750) a hook (858) in a configuration bundle(122) with customized programming (752). A configuration bundle (122)includes services, and other resources for configuring the client device(120) in accordance with methods of the present invention. In someexamples of configuring a client device according to methods of thepresent invention, the configuration bundle (122) is an OSGi bundleincluding services for configuring the client device. The OSGiconfiguration bundle is executed on an OSGi services gateway toconfigure the client device.

In some examples of the method of FIG. 2, the configuration bundle (122)is a configuration bundle specifically designed to configure aparticular client device. Because in many examples of the method of FIG.2 the configuration bundles (122) are designed to configure a specificclient device (120), various configuration bundles (122) have variousdesigns according to the client device the configuration bundle isdesigned to configure, the network on which the client device (120) willoperate, the services gateway to which the configuration bundle (122)will be deployed and executed, or any other factor that will occur tothose of skill in the art.

By contrast, in other examples of the method of FIG. 2, a devicespecific configuration bundle cannot be downloaded to the user'sservices gateway, because a device specific configuration bundle iseither unavailable or does not exist. In cases where a device specificconfiguration bundle is unavailable or does not exist, the configurationbundle (122) is a generic configuration bundle. The genericconfiguration bundle includes services and other resources to facilitatethe user's entry of configuration parameters to configure the clientdevice on the user' services gateway.

The configuration bundle (122) includes a hook (858). A hook (858) is acall from within a configuration bundle to one or more executablesoftware programs that are not associated with the call when the call iswritten into the source code for the bundle. The executable programmingmay not be associated with the call when the call is written for manyreasons. For example, the executable programming may be created by adifferent entity from the manufacturer of the configuration bundle orthe executable programming is written after the configuration bundle iscreated. In many typical embodiments, the hook (858) is a call to apredefined interface or interface methods and a predefined class. Amanufacturer of the configuration bundle provides calls to thepredefined interfaces or interface member methods and predefined classesto allow the manufacturer or other entities to integrate customizedprogramming with the configuration bundle such that the customizedprogramming is executed when the hook is called.

Customized programming (752) includes any programming executable bycalling the hook. In many typical embodiments of the method of FIG. 2,the customized programming (752) includes OSGi services that areexecuted on a services gateway. In some examples, the customizedprogramming includes an OSGi bundle or set of OSGi bundles containingservices that carry out customized functions intended by the entityassociating the customized programming with the hook. In variousalternative embodiments, customized programming can be provided byvarious entities for various purposes such as, for example,advertisement, improved services for configuring client devices,monitoring the user's use of the client device, facilitating furthercommunication with user or for any other purpose that will occur tothose of skill in the art.

Associating (750) customized programming (752) with a hook (858)includes integrating customized programming with the configurationbundle such that when the hook is called the customized programming isexecuted. Associating (750) customized programming (752) with a hookproduces an associated hook. In this specification, an ‘associated hook’is a hook for which customized programming is available to theconfiguration bundle for execution when the associated hook is called.If no customized programming is associated with the hook, then duringexecution of the configuration bundle, calling the hook does nothing.That is, there is no requirement that the hooks in the configurationbundle be associated with executable customized programming. If nocustomized programming is associated with the hook, the hook is called,no customized programming is executed, and configuration of the clientdevice proceeds without interruption.

In the method of FIG. 2, associating (750) customized programming (752)with a hook (858) in a configuration bundle is carried out by a vendor(102). A vendor (102) associates customized programming with the hook tocustomize configuration based on services offered by the vendor, toadvertise for the vendor, or provide any other service that will occurto those of skill in the art. In alternative embodiments of the methodof FIG. 2, associating (750) customized programming (752) with a hook(858) in configuration bundle is carried out by a manufacturer, CSP, orany other entity that will occur to those of skill in the art.

The method of configuring a client device according to FIG. 2 includesdownloading (852) a configuration bundle (122) for a client device (120)to a services gateway (130). In the method of FIG. 2, downloading (852)the configuration bundle (122) for the client device (120) to a servicesgateway (130) includes downloading a configuration bundle (122) from aCSP (104). In alternative embodiments of the method of FIG. 2,downloading (852) the configuration bundle (122) for the client device(120) to a services gateway (130) includes downloading a configurationbundle (122) from a manufacturer, a vendor, a DMS, or any other entitythat will occur to those of skill in the art.

In some examples of the method of FIG. 2 downloading the configurationbundle (122) to the services gateway (130) includes downloading aconfiguration bundle having the customized programming (752) storedwithin the configuration bundle (122). However, in other examples of themethod of FIG. 2, the customized programming is not stored within theconfiguration bundle. In such examples, the method of FIG. 2 includesdownloading (853) the customized programming (752) separately from theconfiguration bundle (122). In some examples of the method of FIG. 2,the customized programming includes an OSGi bundle or set of OSGIbundles that are downloaded separately from the configuration bundle.The OSGi bundles are installed on the services gateway. When the OSGibundle is downloaded to the services gateway, the bundles register theirservices within the bundle on a services registry. The registeredservices are available to the configuration bundle and the customizedprogramming.

In some examples of the method of FIG. 2, downloading (852) aconfiguration bundle (122) includes pushing (150) the configurationbundle (122) to the user's services gateway (130). ‘Pushing’ means thatthe CSP, knowing the WAN network address of a user's services gatewayand being authorized to do so, originates a download of a configurationbundle (122) on the CSP's own motion, without waiting for a specificrequest from a user for the download. In various alternative embodimentsof the method of FIG. 2, pushing (150) the configuration bundle (122) tothe user's services gateway (130) is carried out by a vendor,manufacturer, DMS, or any other entity that will occur to those of skillin the art.

The method of FIG. 2 includes executing (854) the configuration bundle(122) on the services gateway (130). Executing (854) the associatedconfiguration results in a configured client device (222). In manycases, the configuration bundle is executed when the client device isdetected on the services gateway. That is, a service in theconfiguration bundle polls a configuration port on the services gatewayand, when it detects the presence of a client device, the service isprogrammed to proceed with configuration at that time. Methods ofdetecting a client device on a configuration port of a services gatewayare described in more detail below.

In other examples, executing (854) the configuration bundle (122)includes receiving an instruction from the user to execute theconfiguration bundle. Using a web browser installed on a computerconnected to the services gateway, a user, through a series ofinstruction screens, instructs the services gateway to execute theconfiguration bundle. In many embodiments, a services gateway accordingto the present invention has installed directly upon it no userinterface hardware, no terminal screen, no keyboard, no mouse, althoughsuch services gateways do often support HTTP interfaces to services onthe gateway. In such embodiments, a user can access HTTP screens on thegateway by logging on to a browser on a personal computer or otherclient device that does support user interface hardware and is coupledto the gateway through a LAN and directing the browser to the servicesgateway's IP address on the LAN.

In the method of FIG. 2, executing (854) the configuration bundle (122)includes calling (160) the associated hook (858), thereby executing(862) the customized programming (752). In many examples of the methodof FIG. 2, calling (160) the associated hook (860) includes callingpredefined interfaces or interface member methods and a predefinedclass. If no customized programming is associated with the hook, thencalling these predefined interfaces or interface member methods andpredefined classes does nothing. If no customized programming isassociated with the hook, the hook is called, no customized programmingis executed, and configuration of the client device proceeds withoutinterruption.

In some examples, executing (862) the customized programming (752)occurs transparently to the user. That is, the user is not involved inthe configuration process and is unaware of the services deployed bycalling the customized programming. Consider the following example. Avendor provides an extended warranty for the client device. Customizedprogramming designed to register the client device with the vendor toavail the user of the vendor's extended warranty is associated with thehook. The OSGi framework provides standard services in the DAS toidentify the client device by reading information from the client devicesuch as make, model, and serial number. The OSGi framework also providesa standard HTTP service. Executing the customized programming toregister a client device with the vendor includes identifying the make,model and serial number of the client device using standard services inthe DAS, including the make, model, and serial number of the clientdevice in a pre-designed warranty registration, and sending thecompleted pre-designed warranty registration to the vendor as an HTMLdocument in an HTTP message. In this example, customized programmingprovides a service to the user that occurs without user intervention.

In other examples of the method of FIG. 2, executing (862) thecustomized programming (752) makes the user aware of the customizedprogramming (752). For example, customized programming (752) provided bya vendor includes advertisements created as HTML documents. Thecustomized programming also includes calls to the standard OSGi HTTPservices in the services gateway for purposes of displaying to the userat install time the customized HTML documents. Executing (862) thecustomized programming (752) calls the standard OSGi HTTP service tosend the included HTML documents containing advertisements for thevendor as an HTTP message to a desktop computer on a LAN connected tothe services gateway. The user views the HTML document with a webbrowser installed on the user's desktop computer. By viewing theadvertisement from the vendor, the user is made aware of the executionof the customized programming.

FIG. 2 a is a data flow diagram illustrating exemplary methods ofassociating (750) a hook (858) in a configuration bundle (122) withcustomized programming (752). In the method of FIG. 2 a, associating(750) a hook (858) in a configuration bundle (122) with customizedprogramming (752) includes receiving (754) a description (756) of thehook from a manufacturer (134). In some examples of the method of FIG. 2a, a description (756) of the hook includes a predefined interfaces orinterface member methods and predefined class names for the hook suchthat customized programming (752) can be integrated with theconfiguration bundle through the hook (858) so that calling theassociated hook executes the customized programming. In some examples ofthe method of FIG. 2 a, the description (756) of the hook is includedwithin a specification produced for each configuration bundle (122)manufactured by the manufacturer. Other entities interested inassociating (750) customized programming (752) with the hook (858), suchas a CSP, vendor, or any other entity that will occur to those of skillin the art receive the predefined interfaces or interface member methodsand predefined class names for the hook and integrate customizedprogramming with the configuration bundle. Calling the hook executes thecustomized programming.

In the method of FIG. 2 a, associating (750) a hook (858) in aconfiguration bundle (122) with customized programming (752) includesintegrating (758) the customized programming (752) with theconfiguration bundle through the hook (858) in dependence upon thedescription (756) of the hook provided by the manufacturer (134). Insome examples of the method of FIG. 2 a, integrating (758) thecustomized programming (752) with the configuration bundle through thehook (858) includes designing the customized programming having classnames and interfaces or interface member methods for the hook that arepredetermined by the manufacturer and described in the description (756)of the hook. By designing the customized programming with predefinedclass names and predefined interfaces or interface member methodsreceived from the manufacturer, calling the hook executes the customizedprogramming.

In some example of the method of FIG. 2 a, associating (750) thecustomized programming (752) with the hook (858) includes entering (751)the customized programming into the configuration bundle. For example, amanufacturer receives customized programming from a vendor or CSP andenters the customized programming into the configuration bundleproducing a single configuration bundle or set of configuration bundlesavailable for download to the user's services gateway. In other examplesof the method of FIG. 2 a, a vendor, CSP or any other entity enters thecustomized programming into the configuration bundle.

In alternate embodiments of the method of FIG. 2 a, the customizedprogramming is not entered into the configuration bundle. In someexamples of the method of FIG. 2 a, the customized programming is aseparate OSGi bundle or set of OSGi bundles downloadable to the user'sservices gateway. When the customized programming is installed on theuser's services gateway, the customized programming registers serviceswithin the customized programming with the services registry making theservices available for execution by calling the hook.

In some examples, the customized programming includes OSGI compliantservices and resources programmed in Java. In other examples of themethod of FIG. 2 a, the configuration bundle (122) is an OSGi bundle,but the customized programming (752) is written in native languages suchas C, C++, assembly language, or any other language that will occur tothose of ordinary skill in the art. One way integrating customizedprogramming written in native languages with an OSGi configurationbundle through a predefined hook includes using the Java NativeInterface (JNI). JNI provides Java Virtual Machine features tocustomized programming written in native languages through JNI functionsthat are called by the native code. The JNI functions called by thenative code access the Java Virtual Machine. JNI also includes an‘Invocation API’ that allows the Java Virtual Machine to be embedded inthe customized programming written in native languages. The Java VirtualMachine that is embedded in the customized programming allows Java codeof the OSGi configuration bundle to access libraries and resources inthe customized programming written in native languages.

More particularly, a hook in C can be implemented as illustrated by thefollowing pseudocode:

-   -   system(\U serHookDirectory\U serHook.exe);        which, when included in source code of a configuration bundle,        will result in a call to a native executable software program        named “UserHook.exe.” The program UserHook.exe need not exist        when the configuration bundle is created, but is added later by        a CSP, vendor, or manufacturer by integrating the program with        the configuration bundle and downloading a copy of the program        UserHook.exe in a file system on the services gateway where the        configuration bundle is to be executed in a subdirectory named        “\UserHookDirectory.” In some alternative examples, the program        UserHook.exe is entered into the configuration bundle before the        configuration bundle is downloaded to the user's services        gateway. This pseudocode example includes no provision for error        detection. If the program named UserHook.exe is not provided,        does not exist at configuration time, or fails for any reason to        execute correctly, the configuration bundle is unaware of that        fact and continues execution regardless of that fact.

It is useful for explanation to consider an example in C because C is sofamiliar to persons of skill in the art. Because many configurationbundles according to embodiments of the present invention will bewritten in Java, however, it is advantageous also to consider apseudocode example of a user hook in Java:

-   -   loadC lass(UserHookDirectory. UserHookClass);    -   aUserHookObject=new UserHookClass( )    -   aUserHookObject. UserHookMethod( )

The pseudo code example above directs the local JVM to load the classUserHookClass from the directory named UserHookDirectory. The pseudocode instantiates a user hook object named aUserHookObject, and executesthe public member method named UserHookMethod( ) A CSP, vendor, or othermanufacturer wishing to integrate customized programming with theconfiguration bundle provides a class named UserHookClass including apublic member method named UserHookMethod( ) The CSP, vendor, ormanufacturer stores the class UserHookClass in a local subdirectorynamed \UserHookDirectory.

In this example, again, there is no error check, no exception thrown. IfUserHookClass is absent or fails to load for any reason, a bundlecontaining such exemplary code simply continues execution unabated. Ifthe ‘new’ call fails for any reason to instantiate aUserHookObject, abundle containing such exemplary code simply continues executionunabated. If UserHookMethod( ) is missing from the class or fails toexecute correctly for any reason, a bundle containing such exemplarycode simply continues execution unabated.

FIG. 3 is a data flow diagram illustrating an exemplary method ofdetecting (250) a client device (120) and requesting (242) aconfiguration bundle (242) for the client device (120). In the method ofFIG. 3, detecting a client device (120) includes polling (240) a serialinterface (118) for the connection of a client device (120). Polling(240) a serial interface (118) means periodically checking the serialinterface for the connection of a device.

In the method of FIG. 3, detecting (250) a client device (250) iscarried out through a polling bundle (246). In some example embodiments,the polling bundle (246) is an OSGi bundle. An OSGi framework providesstandard services in the DAS for checking for the connection of deviceson the services gateway (130). In some examples, the polling bundle(246) includes specifically programmed polling services within thebundle. In alternative examples, the polling bundles queries a servicesregistry on an OSGi framework operating on the services gateway toidentify standard OSGi services for checking for the connection of adevice on the services gateway. In the example of FIG. 3, the pollingbundle (246) uses the OSGi standard services to poll (240) the serialinterface (118) and detect the client device (120).

The method of FIG. 3 includes reading (252) a client device identifier(254) from the client device (120) when polling detects a client deviceconnected to a serial interface. A client device identifier (254) is anyidentification that sufficiently identifies the client device such thatan appropriate configuration bundle for the client device may beobtained and executed. Exemplary client device identifiers includemanufacturer name, model name, serial number, or any other client deviceidentifier as will occur to those of skill in the art.

The client device identifier may be represented in data by a record suchas the client device identifier record (254) of FIG. 3. The clientdevice identifier record (254) is stored in non-volatile memory on theclient device (120). The client device identifier record (254) includesa deviceID field (255) representing a serial number, make and model, orany other identification of the device that will occur to those of skillin the art. The device identifier record (254) of FIG. 3 also includes avendorID field (257) identifying the vendor (102) of the client device.In some examples, a vendor may place a unique identifier in the vendorIDfield of the client device before selling the client device or themanufacturer many identify the vendor by vendorID before shipping theclient device to the vendor.

In method of FIG. 3, a polling bundle (246) carries out reading (252) aclient device identifier (254) from the client device (120). In someexample embodiments, the polling bundle (246) is an OSGi bundle. An OSGiframework provides standard services in a DAS for reading deviceidentifiers from a device connected to the services gateway (130). Insome exemplary methods of detecting client devices and requestingconfiguration bundles, a polling bundle (246) includes specificallyprogrammed services within the bundle to read the client deviceidentifier. In alternative examples, the polling bundle queries aservices registry on an OSGi framework operating on the services gatewayto identify standard OSGi services for reading a client deviceidentifier. In such embodiments, the polling bundle (246) then uses theOSGi standard services to read a client device identifier from theclient device.

A DAS in an OSGi framework often also provides standard services toidentify and install a driver for the client device. In embodiments thatutilize such DAS services, when a polling bundle (246) detects a clientdevice (120) and identifies the client device (120), the polling bundlequeries the service registry on the service framework of the servicesgateway to identify standard services to obtain and install a driver tofacilitate communication between the services gateway and the clientdevice.

In some exemplary methods of detecting client devices and requestingconfiguration bundles, the configuration bundle for the client device ispushed onto the services gateway (120). In such exemplary embodiments,requesting (256) the configuration bundle includes requesting theconfiguration bundle stored within the services gateway. In otherexemplary embodiments, where the configuration bundle is not pushed ontothe services gateway (130), requesting (256) a configuration bundleincludes requesting a configuration bundle from a DMS.

A request for a configuration bundle can be represented in data as arecord such as, for example, the bundle request record (810) of FIG. 3.The bundle request record (810) includes a deviceID field (255)identifying the client device to be configured. The bundle requestrecord (810) also includes a gatewayID field (261) identifying thegateway requesting the associated configuration bundle. The bundlerequest record (810) of FIG. 3 includes a vendorID field (257)identifying the vendor (102) of the client device (120). In someexamples, the gatewayID and the DeviceID together uniquely identify aclient-device-specific configuration bundle for the device. In somecases, the client-device-specific configuration bundle is associatedwith user-provided configuration parameters. In other examples, thebundle request record includes a userID identifying the user.

Requesting (256) a configuration bundle, in many embodiments of thepresent invention, is carried out by a requesting bundle, such as therequesting bundle (242) of FIG. 3. In some exemplary embodimentsaccording to the present invention, the requesting bundle (242) is anOSGi bundle including services capable of sending a request for anassociated configuration bundle to a DMS. The OSGi framework provides astandard HTTP service. In some examples, a requesting bundle (242) sendsa bundle request to the DMS as a HTML document in an HTTP message. Themethod of FIG. 3 includes authenticating (280) the services gateway(130). Authenticating the gateway can be carried out, for example, bycomparing (284) the gatewayID field (261) of the bundle request record(810) with a gateway database (286). In the method of FIG. 3,authenticating (280) the services gateway (130) is carried out by a DMS.The DMS authenticates the services gateway by comparing the servicesgateway identifier with a database of gateway identifiers registeredwith the DMS. When the services gateway is authenticated, the method ofFIG. 3 includes retrieving the configuration bundle stored on the DMS.The DMS downloads the configuration bundle to the services gateway forexecution.

When the services gateway is authenticated, the DMS identifies theconfiguration bundle for the client device stored on the DMS. The DMSidentifies a configuration bundle for the client device in dependenceupon the deviceID field (255) and the gatewayID field (261) of thebundle request record (810). The DMS downloads the identifiedconfiguration bundle to the services gateway for execution.Alternatively, the DMS requests the configuration bundle from a vendoridentified by the vendorID field of the bundle request record (810).

FIG. 4 is a data flow diagram illustrating a method of receiving aconfiguration bundle and user provided configuration parameters at avendor. The method of FIG. 4 includes receiving (504), at the vendor(102), a configuration bundle (122) for the client device (120). In themethod of FIG. 4, the configuration bundle (122) is received from amanufacturer (132). The manufacturer (132) is a manufacturer of theconfiguration bundle (122) for the client device (120). In many examplesaccording to the present invention, the manufacturer (132) of theconfiguration bundle (122) is the manufacturer of the client device(120). However, in other examples, the manufacturer (132) of theconfiguration bundle may not manufacture the client device (120).

In the example of FIG. 4, the configuration bundle (122) includesservices and other resources for configuring the client device (120) inaccordance with methods of the present invention. In some cases, theconfiguration bundle (122) includes a driver for the client device(120). In some examples of configuring a client device according tomethods of the present invention, the configuration bundle (122) is anOSGi bundle including services for configuring the client device. TheOSGi configuration bundle is executed on an OSGi services gateway toconfigure the client device. Because the in many examples of the methodof FIG. 4 the configuration bundle (122) is designed to configure aspecific client device (120), in many examples, various configurationbundles (122) have various designs according to the client device theconfiguration bundle is designed to configure, the network on which theclient device (120) will operate, the services gateway to which theconfiguration bundle (122) will be deployed and executed, or any otherfactor that will occur to those of skill in the art.

The configuration bundle (122) includes a hook (858). A hook (858) is acall from within a configuration bundle to one or more executablesoftware programs that are not associated with the call when the call iswritten into the source code for the bundle. The executable programmingmay not be associated with the call when the call is written for manyreasons. For example, the executable programming may be created by adifferent entity from the manufacturer of the configuration bundle orthe executable programming is written after the configuration bundle iscreated. In many typical embodiments, the hook (858) is a call to apredefined interface or interface methods and a predefined class. Amanufacturer of the configuration bundle provides calls to thepredefined public member method and predefined class to allow themanufacturer or other entities to integrate customized programming withthe configuration bundle such that the customized programming isexecuted when the hook is called. A manufacturer of the configurationbundle provides hooks to allow the manufacturer or other entitiesinvolved in the configuration the flexibility to associate customizedprogramming with the hook at a later time.

In some examples of the method of FIG. 4, receiving (504), at the vendor(102), a configuration bundle (122) for the client device (120) from amanufacturer (132) includes individually downloading the configurationbundle (122) from, for example, a manufacturer's website. Alternatively,receiving (504), at the vendor (102), a configuration bundle (122) forthe client device (120) from a manufacturer (132) includes receivingconfiguration bundles as a complete database of configuration bundlesindexed, for example, by make, model, or client device serial number. Inmany cases, the database is stored on a compact disc, or other form ofnon-volatile computer memory. Receiving (504), at the vendor (102), aconfiguration bundle (122) for the client device (120) from amanufacturer (132) includes receiving updates to configuration bundles(122) previously received at the vendor (102).

The method of FIG. 4 includes receiving (502), at a vendor (102),user-provided configuration parameters (212) for the client device (120)from a user (210). Although a vendor is generally a businessorganization, a vendor (1 02) as depicted in FIG. 4 comprisesparticularly a vendor's automated computing machinery upon which iscarried out processing steps in methods for configuring client devicesaccording to embodiments of the present invention.

User provided configuration parameters (212) typically includeconfiguration parameters known or available to the user (134) thatconcern the user's services gateway, network, or other configurationparameters that define the context in which the client device (120) willoperate. Examples of user provided configuration parameters (212)include a user's LAN mask, a user's IP default gateway address, a user'sIP address, a user's LAN name, a user's DMS name, a users link type(Ethernet, Bluetooth, 802.11), wireless network name, wirelessencryption key, or any other user provided configuration parameters thatwill occur to those of skill in the art.

In some embodiments of the present invention, some additionalconfiguration parameters such as a client device identifier are madeknown to the vendor by the purchase of the client device. That is,parameters such as serial number, make and model of the client deviceare available to the vendor (102) at the point of sale, and therefore,the vendor may not receive these configuration parameters from the user.

In the method of FIG. 4, receiving (502), at a vendor (102), userprovided configuration parameters (212) for the client device (120)includes storing (602) the user provided configuration parameters (212)in a database (604). By storing (602) user provided configurationparameters (212) the vendor (102) provides an additional service to theuser. The user provides the user provided configuration parameters (212)one time to the vendor (102). The vendor automates the configuration fora user reducing the user's involvement in configuration with eachadditional client device (120) the user purchases from the vendor. Inthis way, a user is encouraged to continue shopping with the vendor(102), because configuring client devices (102) proceeds automaticallyfor each client device purchased after the vendor received the userprovided configuration parameters (212).

In the method of FIG. 4, receiving (504), at the vendor (102), aconfiguration bundle (122) for the client device (120) from amanufacturer (132) includes storing (606) the configuration bundle (122)in a database (604). The database (604) of FIG. 4 is indexed accordingto a client device identifier (608). A vendor (102) receives (504) theconfiguration bundle from the manufacturer (132) and stores (606) theconfiguration bundles in a database (604).

In one example, a vendor (102) receives configuration bundles from manymanufacturers regardless the user's purchases. The vendor (102)maintains a current database of all the configuration bundles for allthe manufacturers whose products the vendor (102) sells. When the vendor(102) sells the client device, a configuration bundle (122) for theclient device is available in the vendor's database (604) for purchase,or for the vendor (102) to provide as an additional customer service.

In the database (604) of FIG. 4, the configuration bundles (122) areindexed according to client device identifier (608). Examples of clientdevice identifiers (608) include manufacturer name and model number,serial number or any other client device identifier that will occur tothose of skill in the art. By indexing the database (604) by clientdevice identifier (608) the vendor (102) can retrieve the appropriateconfiguration bundle for the client device when the user purchases theclient device.

The method of FIG. 4 includes receiving (754), at a vendor, adescription (756) of the hook. In some examples of the method of FIG. 4,a description (756) of the hook includes a predefined interfaces orinterface member methods and predefined class names for the hook, suchthat customized programming (752) can be integrated with theconfiguration bundle through the hook (858) so that calling theassociated hook executes the customized programming. In some examples ofthe method of FIG. 4, the description (756) of the hook is includedwithin a specification produced for each configuration bundle (122)manufactured by the manufacturer. A vendor interested in associating(750) customized programming (752) with the hook (858) receives thepredefined interfaces or interface member methods and predefined classnames for the hook and designs customized programming to be executedwhen the hook is called.

FIG. 5 is a data flow diagram illustrating a method of associating (506)the user-provided configuration parameters (212) with the configurationbundle (122). Associating (506) the user provided configurationparameters (212) with the configuration bundle (122) results in anassociated configuration bundle. An associated configuration bundle is aconfiguration bundle having the appropriate configuration parameterssuch that when deployed to the user's services gateway, and whenexecuted, the associated configuration bundle configures the clientdevice.

When the user-provided configuration parameters (212) have beenassociated with the configuration bundle (122), the associatedconfiguration bundle is ready for deployment to the user's servicesgateway. In many cases, more than one configuration bundle areassociated to create a complete set of associated configuration bundles,such that when the set of configuration bundles are deployed onto theuser's services gateway and executed, the user's client device isconfigured.

In the method of FIG. 5, associating (506) the user-providedconfiguration parameters (212) with the configuration bundle (122) forthe client device (120) is carried out by the vendor (102). In oneexample, the vendor (102) receives the user provided configurationparameters (212) at the point of sale and receives a configurationbundle (122) from a manufacturer (132). The vendor associates theuser-provided configuration parameters (212) with the configurationbundle (122), thereby creating an associated configuration bundle forthe user.

Consider an example of a vendor (102) operating a website. A user (210)purchases a client device (120) from the vendor (102) through thevendor's website. During the purchase, a vendor's (102) website includesa series of screens requesting user provided configuration parameters(212). Upon completion of the purchase, the vendor (102) receives (504)a configuration bundle (122) from a manufacturer (132) or retrieves aconfiguration bundle from a database of configuration bundles alreadyreceived from the manufacturer (134). The vendor (102) associates theuser provided configuration parameters with the configuration bundle(122).

In the method of FIG. 5 associating (506) the user providedconfiguration parameters (212) for the client device (120) with theconfiguration bundle (122) for the client device (120) includesretrieving (702) the configuration bundle (122) from a database (604) independence upon a client device identifier (608). When the vendor (102)sells the client device (120) to the user, the vendor (102) retrieves(702) the appropriate configuration bundle (122) from the vendor'sdatabase (604).

If the user (210) is a previous customer of the vendor (102), the vendormay have user-provided configuration parameters (212) for the userstored in the vendor's database. In the method of FIG. 5, associating(506) the user provided configuration parameters (212) for the clientdevice (120) with the configuration bundle (122) for the client device(120) includes retrieving (704) user provided configuration parameters(212) from a database (604) in dependence upon a user identifier (610)and entering (213) the user provided configuration parameters into theconfiguration bundle (122).

In the method of FIG. 5, associating (506) user provided configurationparameters (212) with the configuration bundle (122) includes entering(213) the user provided configuration parameters (212) into theconfiguration bundle retrieved from the vendor's database (604). In oneexample, entering (213) the user provided configuration parameters (212)into the configuration bundle received from the manufacturer (134) iscarried out through a website run by the vendor (102). When a userpurchases a client device (120) through the vendor's website, thevendor's website provides screens prompting the user to input userprovided configuration parameters. The vendor (102) receives the userprovided configuration parameters through the web site and the vendor(102) enters the user provided configuration parameters (212) into theconfiguration bundle (122). Alternatively, the associated configurationbundle is then downloaded to the user's services gateway, downloaded toa DMS, or stored at the vendor (102).

The method of FIG. 5 includes integrating (758) customized programming(752) with a hook (858). In some examples of the method of FIG. 2 a,integrating (758) the customized programming (752) with theconfiguration bundle includes designing customized programming havingthe predefined class names and predefined interfaces or interface membermethods for the hook that are predetermined by the manufacturer anddescribed in the description (756) of the hook. By designing thecustomized programming with predefined class names and predefinedinterfaces or interface member methods received from the manufacturer,calling the hook executes the customized programming.

FIG. 6 is a data flow diagram illustrating a method of receiving (202),at a configuration services provider (104), a configuration bundle (122)for a client device and receiving (208), at a configuration servicesprovider (104), user-provided configuration parameters (212) for theclient device. The method of FIG. 6 includes receiving, (202) from amanufacturer (132), a configuration bundle (122) for a client device(120). The manufacturer (132) is a manufacturer of the configurationbundle (122) for the client device (120). In many exemplary methods forconfiguring client devices according to embodiments of the presentinvention, a manufacturer (132) of a configuration bundle (122) is themanufacturer of the client device (120). However, in other examples, themanufacturer (132) of the configuration bundle may not manufacture theclient device (120).

In the example of FIG. 6, the configuration bundle (122) includesservices and other resources for configuring the client device (120) inaccordance with methods of the present invention. In some cases, theconfiguration bundle (122) may include a driver for the client device(120). In some examples of configuring a client device according tomethods of the present invention, the configuration bundle (122) is anOSGi bundle including services for configuring the client device. TheOSGi configuration bundle is executed on an OSGi services gateway toconfigure the client device. Because in many examples of the method ofFIG. 6 the configuration bundle (122) is designed to configure aspecific client device (120), various configuration bundles (122) havevarious designs according to the client device the configuration bundleis designed to configure, the network on which the client device (120)will operate, the services gateway to which the configuration bundle(122) will be deployed and executed, or any other factor that will occurto those of skill in the art.

The configuration bundle (122) includes a hook (858). A hook (858) is acall from within a configuration bundle to one or more executablesoftware programs that are not associated with the call when the call iswritten into the source code for the bundle. The executable programmingmay not be associated with the call when the call is written for manyreasons. For example, the executable programming may be created by adifferent entity from the manufacturer of the configuration bundle orthe executable programming is written after the configuration bundle iscreated. In many typical embodiments, the hook (858) is a call to apredefined interface or interface methods and a predefined class. Amanufacturer of the configuration bundle provides calls to thepredefined public member method and predefined class to allow themanufacturer or other entities to integrate customized programming withthe configuration bundle such that the customized programming isexecuted when the hook is called. A manufacturer of the configurationbundle provides hooks to allow the manufacturer or other entitiesinvolved in the configuration the flexibility to associate customizedprogramming with the hook at a later time.

In the method of FIG. 6, receiving (202) the configuration bundle (122)for the client device (120) is carried out by a CSP (104). The CSPreceives configuration bundles (122) for the client device (120) fromthe manufacturer (132) for a user (210). A user (210) is typically asubscriber with the CSP (104). When the user (210) purchases or obtainsa client device (120) to be configured, the CSP (104) provides theappropriate configuration bundle (122) to the user. A user (210) mayrequest the configuration bundle for the client device from the CSP(104) by calling the CSP, sending the CSP an email, or any other methodof requesting the CSP of the new client device to be configured.Alternately, the vendor (102) of the client device (102) notifies theuser's CSP (104) of the purchase of the client device (120).

In some examples of the method of FIG. 6, receiving, (202) from amanufacturer (132), a configuration bundle (122) for a client device(120) includes individually downloading the configuration bundle (122)from, for example, a manufacturer's website. Alternatively, receiving,(202) from a manufacturer (132), a configuration bundle (122) for aclient device (120) includes receiving configuration bundles as acomplete database of configuration bundles indexed, for example, bymake, model, or client device serial number. In many cases, the databaseis stored on a compact disc, or other form of non-volatile computermemory. Receiving, (202) from a manufacturer (132), a configurationbundle (122) for a client device (120) also includes receiving updatesto configuration bundles (122) previously received by the CSP (104).

The method of FIG. 6 includes receiving, (204) from a vendor (102),vendor provided configuration parameters (206) for the client device(120). A vendor (102) is a seller, retailer, or provider of the clientdevice (120) to the user. In many examples according to methods of thepresent invention, the vender provided configuration parameters (206)include a client device identifier. A client identifier sufficientlyidentifies the client device, such that the appropriate configurationbundle may be received, by for example, a CSP. Examples of client deviceidentifiers are manufacturer's name and manufacturer's model number, aserial number, or any other client device identifier that will occur tothose of skill in the art.

In the method of FIG. 6, receiving, (204) from a vendor (102), vendorprovided configuration parameters (206) for the client device (120) iscarried out by a CSP (104). In one example, a CSP (104) receives vendorprovided configuration parameters (206), such as a client identifieridentifying the client device (120) purchased by a user (210), from thevendor (102) at the point-of-sale, by receiving an email, telephonecall, or any other method of receiving vendor provided configurationparameters (206) that will occur to those of skill in the art.

Consider an example of a vendor (102) operating a website. A user (21 0)purchases a client device (120) from the vendor (102) through thevendor's website. During the purchase, a vendor's (102) website includesa screen requesting contact information for the user's CSP (104). Uponcompletion of the purchase, the vendor (102) provides vendor providedconfiguration parameters (206) to the CSP (104). In this way, the vendor(102) provides vendor provided configuration parameters (206) to the CSP(104) automatically when the user purchases the client device (120).

The method of FIG. 6 includes receiving, (208) from a user (210), userprovided configuration parameters (212) for the client device (120).User provided configuration parameters (212) typically includeconfiguration parameters known or available to the user (134) thatconcern the user's services gateway, network, or other configurationparameters that define context in which the client device (120) willoperate. Examples of user provided configuration parameters (212)include a user's LAN mask, a user's IP default gateway address, a user'sIP address, a user's LAN name, a user's DMS name, a users link type(Ethernet, Bluetooth, 802.11), wireless network name, wirelessencryption key, or any other user provided configuration parameters thatwill occur to those of skill in the art.

In many examples of methods of configuring a client device according tothe present invention, receiving (208) from a user (210), user providedconfiguration parameters (212) is carried out by a CSP (104). A CSP(104) receives the user provided configuration parameters one time andstores the user provided configuration parameters in a database. The CSPmaintains the user provided configuration parameters for the user. Whena user (210) subsequently purchases a client device (120), the userprovided configuration parameters (212) are available in the CSP'sdatabase. Configuration of the client device, therefore, is carried outwithout requiring additional user provided configuration parameters.

In the method of FIG. 6, receiving (202), from a manufacturer (132), aconfiguration bundle (132) for a client device includes storing (302)the configuration bundle (132) in a database (304). In the method ofFIG. 6, storing (302) the configuration bundle in a database is carriedout by a CSP (104). A CSP (104) receives (202) the configuration bundlefrom the manufacturer (132) and stores the configuration bundles in adatabase (304. In one example, a CSP receives configuration bundles frommany manufacturers regardless the CSP's users. The CSP maintains acurrent database of all the configuration bundles for all themanufacturers that the service provider supports.

In the database (304) of FIG. 6, the configuration bundles (122) areindexed according to client device identifier (308). Examples of clientdevice identifiers (308) include manufacturer name and model number,serial number or any other client device identifier that will occur tothose of skill in the art. By indexing the database (304) by clientdevice identifier (308) the CSP can retrieve the appropriateconfiguration bundle for the client device to be configured when the CSPis notified of the client device in need of configuration.

In the method of FIG. 6, receiving (208), from a user (210), userprovided configuration parameters (212) for the client device includesstoring (310) the configuration parameters (212) in a database (304). Inmany examples of the method of the present invention, storing (310) theconfiguration parameters (212) in a database (304) is carried out by aCSP. The CSP receives configuration parameters from a user of theconfiguration services. The CSP receives the user provided configurationparameters one time and stores the user provided configurationparameters.

By storing (310) user provided configuration parameters (212), the CSPautomates the configuration for a user reducing the user's involvementin configuration with each additional client device (120) on the user'sgateway. Upon receipt of the vendor provided configuration parameters,for example, a client device identifier, the CSP can retrieve theappropriate configuration bundle and the user provided configurationparameters without further user intervention.

In the method of FIG. 6, receiving (754) a description (756) of the hookis carried out by the CSP. In some examples of the method of FIG. 6, adescription (756) of the hook includes predefined interfaces orinterface member methods and predefined class names for the hook, suchthat customized programming (752) can be integrated with theconfiguration bundle through the hook (858) so that calling theassociated hook executes the customized programming. In some examples ofthe method of FIG. 6, the description (756) of the hook is includedwithin a specification produced for each configuration bundle (122)manufactured by the manufacturer. A vendor interested in associating(750) customized programming (752) with the hook (858) receives thepredefined interfaces or interface member methods and predefined classnames for the hook and designs customized programming to be executedwhen the hook is called.

FIG. 7 is a data flow diagram illustrating a method of associating (214)the user-provided configuration parameters (212) with the configurationbundle (122). The method of FIG. 7 includes associating (214) the vendorprovided configuration parameters (206) and the user providedconfiguration parameters (212) with the configuration bundle (122) forthe client device (120). Associating (214) the vendor providedconfiguration parameters (206) and the user provided configurationparameters (212) results in an associated configuration bundle. Anassociated configuration bundle is a configuration bundle having theappropriate configuration parameters such that when deployed to theuser's services gateway, and when executed, the associated configurationbundle configures the client device.

When the user provided configuration parameters (212) and the vendorprovided configuration parameters have been associated with theconfiguration bundle, the associated configuration bundle is ready fordeployment to the user's services gateway. In many cases, more than oneconfiguration bundle are associated to create a complete set ofassociated configuration bundles, such that when the set ofconfiguration bundles are deployed onto the user's services gateway andexecuted, the user's client device is configured.

In the method of FIG. 7, associating (214) the vendor providedconfiguration parameters (206) and the user provided configurationparameters (212) with the configuration bundle (122) for the clientdevice (120) is carried out by a CSP. In some examples, the CSP receivesa notification that the user (210) has purchased or otherwise obtained aclient device (120). The CSP receives the vendor provided configurationparameters (206), such as a client device identifier. The CSP receivesthe appropriate configuration bundle (122) for the client device (120)from a manufacturer. The CSP may then retrieve the user providedconfiguration parameters (212) from a database maintained by the CSP.The CSP then associates the vendor provided configuration parameters(206) and the user provided configuration parameters (212) with theconfiguration bundle (122) for the client device (120).

In the method of FIG. 7, associating (214) the vendor providedconfiguration parameters (206) and the user provided configurationparameters (206) with the configuration bundle (122) for the clientdevice (120) includes retrieving (402) the configuration bundle (122)from a database (304) in dependence upon a client device identifier(308) and retrieving (404) the user configuration parameters (212) froma database (304) in dependence upon a user identifier (310).

In the method of FIG. 7, associating (214) the vendor providedconfiguration parameters (206) and the user provided configurationparameters (212) with the configuration bundle (122) includes entering(213) the user provided configuration parameters (212) into theconfiguration bundle received from the manufacturer (134). Associating(214) the vendor provided configuration parameters (206) and the userprovided configuration parameters (212) with the configuration bundle(122) also includes entering (215) and vendor provided configurationparameters (206) into the configuration bundle (122) received from themanufacturer (132).

In method of FIG. 7, associating (214) the vendor provided configuration5 parameters (206) and the user provided configuration parameters (212)with the configuration bundle (122) is carried out by a CSP (104). Inone example, entering (213) the user provided configuration parameters(212) into the configuration bundle received from the manufacturer (134)and entering (215) and vendor provided configuration parameters (206)into the configuration bundle (122) received from the manufacturer (132)is carried out through a website run by the CSP (104). Upon purchasing aclient device (120) a vendor logs onto the CSP's website. The vendor(102) provides the vendor provided configuration parameters (206)through the web site and the CSP (104) enters the vendor providedconfiguration parameters (206) into the configuration bundle (122) forthe client device (120). The vendor (102) also identifies the user, byuserID, name, or any other user identifier (310). The CSP (104)retrieves the user provided configuration parameters (212) stored in adatabase indexed by userID, name, or any other user identifier andenters the user provided configuration parameters (212) into theconfiguration bundle (122) for the client device (120).

If the CSP (104) has not received the user provided configurationparameters (212) from the user (210), the CSP can receive the userprovided configuration parameters (212) from the user through the CSP'swebsite. The CSP (104) receives the user provided configurationparameters (212) through the website, and enters the user providedconfiguration parameters (212) into the configuration bundle (122) forthe client device (120).

In another example of the method of FIG. 7 includes integrating (758)customized programming (752) with a hook (858). In some examples of themethod of FIG. 2 a, integrating (758) the customized programming (752)with the configuration bundle includes designing the customizedprogramming having the predefined class names and predefined interfacesor interface member methods for the hook that are predetermined by themanufacturer and described in the description (756) of the hook. Bydesigning the customized programming with predefined class names andpredefined interfaces or interface member methods received from themanufacturer, calling the hook executes the customized programming.

FIG. 8 is a data flow diagram illustrating a method of downloading ageneric configuration bundle to configure a client device in accordancewith methods of configuring a client device according to the presentinvention. In the method of FIG. 8, downloading (852) a configurationbundle (122) for a client device (120) to a services gateway includesdownloading (150) a generic configuration bundle (814) to a servicesgateway.

The method of FIG. 8 includes detecting (250) the client device (120).In the method of FIG. 8, detecting (250) a client device (120) includespolling (240) a serial interface (118) of a services gateway (130) forthe connection of a client device (120) to the services gateway (130).Polling (240) a serial interface (118) means periodically checking theserial interface for the connection of a client device.

In the method of FIG. 8, detecting (250) the client device (250) iscarried out through a polling bundle (246). In some example embodiments,the polling bundle (246) is an OSGi bundle. An OSGi framework providesstandard services in the DAS for checking for the connection of deviceson the services gateway (130). In some examples, the polling bundle(246) includes specifically programmed polling services within thebundle. In alternative examples, the polling bundle (246) queries aservices registry on an OSGi framework operating on the services gatewayto identify standard OSGi services for checking for the connection of adevice on the services gateway.

The method of FIG. 8 includes reading (252) a client device identifier(254) from the client device (120). A client device identifier (254) isany identification that sufficiently identifies the client device.Exemplary client device identifiers include manufacturer name, modelname, serial number, or any other client device identifier as will occurto those of skill in the art.

The client device identifier may be represented in data by a record suchas the client device identifier record (254) of FIG. 8. The clientdevice identifier record (254) is stored in non-volatile memory on theclient device (120). The client device identifier record (254) includesa deviceID field (255) representing a serial number, make and model, orany other identification of the device that will occur to those of skillin the art.

In method of FIG. 8, a polling bundle (246) carries out reading (252) aclient device identifier (254) from the client device (120). In someexample embodiments, the polling bundle (246) is an OSGi bundle. An OSGiframework provides standard services in a DAS for reading deviceidentifiers from a device connected to the services gateway. In someexamples according to the method of FIG. 8, a polling bundle (246)includes specifically programmed services within the bundle to read theclient device identifier. In alternative examples, the polling bundle(246) queries a services registry on an OSGi framework operating on theservices gateway to identify standard OSGi services for reading a clientdevice identifier. In such embodiments, the polling bundle (246) thenuses the OSGi standard services to read a client device identifier fromthe client device standard OSGi services for reading a client deviceidentifier. In such embodiments, the polling bundle (246) then uses theOSGi standard services to read a client device identifier from theclient device.

A DAS in an OSGi framework often also provides standard services toidentify and install a driver for the client device. In embodiments thatutilize such DAS services, when a polling bundle (246) detects a clientdevice (120) and reads the client device identifier, the polling bundlequeries the service registry on the service framework of the servicesgateway to identify standard services to obtain and install a driver tofacilitate communication between the services gateway and the clientdevice.

The method of FIG. 8 includes requesting (256) a configuration bundlefor the client device (120) in dependence upon the client deviceidentifier (254). The configuration bundle (122) includes services andother resources for configuring the client device (120) in accordancewith methods of the present invention. In some cases, the configurationbundle (122) may include a driver for the client device (120). In someexamples of configuring a client device according to methods of thepresent invention, the configuration bundle (122) is an OSGi bundleincluding services for configuring the client device. The OSGiconfiguration bundle is executed on an OSGi services gateway toconfigure the client device. Because the configuration bundle (122) isdesigned to configure a specific client device (120), in many examples,various configuration bundles (122) have various designs according tothe client device the configuration bundle is designed to configure, thenetwork on which the client device (120) will operate, the servicesgateway to which the configuration bundle (122) will be deployed andexecuted, or any other factor that will occur to those of skill in theart.

In some examples of the present invention, requesting (256) aconfiguration bundle for the client device includes requesting anassociated configuration bundle. An associated configuration bundle is aconfiguration bundle with user-provided configuration parameterscontained within the bundle, such that when executed on the user'sservices gateway, the associated configuration bundle configures theclient device without requiring the user to enter configurationparameters. Examples of user-provided configuration parameters (212)include a user's LAN mask, a user's IP default gateway address, a user'sIP address, a user's LAN name, a user's DMS name, a users link type(Ethernet, Bluetooth, 802.11), wireless network name, wirelessencryption key, or any other user-provided configuration parameters thatwill occur to those of skill in the art.

In the method of FIG. 8, requesting (256) a configuration bundle for theclient device includes requesting the configuration bundle for theclient device from a DMS. The DMS is a server specifically designed toprovide bundles to the services gateway (130). Alternatively, requesting(256) a configuration bundle for the client device includes requestingan associated configuration bundle from a vendor, manufacturer, or CSP.

A request for a configuration bundle is represented in a data as arecord such as the bundle request record (810) of FIG. 8. The bundlerequest record (810) includes a deviceID field (255) identifying theclient device to be configured. The bundle request record (810) alsoincludes a gatewayID field (261) identifying the gateway requesting theassociated configuration bundle. In some examples, the gatewayID and theDeviceID together uniquely identify the configuration bundle for thedevice. In other example, the bundle request record includes a userIDidentifying the user.

Requesting a configuration, in many embodiments of the presentinvention, is carried out by a requesting bundle, such as the requestingbundle (242) of FIG. 8. In some exemplary embodiments according to thepresent invention, the requesting bundle (242) is an OSGi bundleincluding services capable of sending a request for an associatedconfiguration bundle to a DMS. The OSGi framework provides a standardHTTP service. In some examples, a requesting bundle (242) sends a bundlerequest to the DMS as a HTML document in an HTTP message.

The method of FIG. 8 includes authenticating (280) the services gateway(130). Authenticating the gateway can be carried out, for example, bycomparing (284) the gatewayID field (261) of the bundle request record(810) with a gateway database (286). In the method of FIG. 8,authenticating (280) the services gateway (130) is carried out by a DMS.The DMS authenticates the services gateway by comparing the servicesgatewayID (261) with a database of gateway identifiers registered withthe DMS. When the services gateway is authenticated, the DMS attempts toidentify an associated configuration bundle for the client device storedon the DMS, or attempts to retrieve an associated configuration bundlefrom a CSP or vendor.

The method of FIG. 8 includes downloading (150) a generic configurationbundle (814). A generic configuration bundle (814) is a configurationbundle for carrying out methods of configuring a client device inaccordance with the present invention when a configuration bundlespecific to the client device is not available either because theconfiguration bundle does not exist, or the services gateway does nothave access to the associated configuration bundle through a DMS, CSP,vendor, or manufacturer. The generic configuration bundle (814) includesservices and other resources to facilitate the user's entry ofuser-provided configuration parameters to configure the client device(120).

The method of FIG. 8 executing (854) the configuration bundle (122)includes executing (816) the generic configuration bundle (814). In manycases, the generic configuration bundle (814) is executed when theclient device (120) is detected on the services gateway (130). In otherexamples, executing (816) the generic configuration bundle (814)includes receiving an instruction from the user to execute the genericconfiguration bundle (814). Using a web browser installed on a computerconnected to the services gateway, a user can through a series ofinstruction screens instruct the services gateway to execute the genericconfiguration bundle. In many embodiments, a services gateway accordingto the present invention has installed directly upon it no userinterface hardware, no terminal screen, no keyboard, no mouse, althoughsuch services gateways do often support HTTP interfaces to services onthe gateway. In such embodiments, a user can access HTTP screens on thegateway by logging on to a browser on a personal computer or otherclient device that does support user 15 interface hardware and iscoupled to the gateway through a LAN and directing the browser to theservices gateway's IP address on the LAN.

In the method of FIG. 8, executing (816) the configuration bundle (122)includes calling (160) the associated hook (858). Calling (160) theassociated hook (858), executes the customized programming (752). Inmany examples of the method of FIG. 8, calling (160) the associated hook(860) includes calling predefined interfaces or interface member methodsand a predefined class. If no customized programming is associated withthe hook, then calling these predefined interfaces or interface membermethods and predefined classes does nothing. If no customizedprogramming is associated with the hook, the hook is called, nocustomized programming is executed, and configuration of the clientdevice proceeds without interruption.

FIG. 9 is a data flow diagram illustrating an exemplary method ofexecuting (816) a generic configuration bundle (814). In the method ofFIG. 9 executing (816) a generic configuration bundle (814) includesreading (906) a configuration prompt (908) from a client device (120).In method of FIG. 9, a configuration prompt (908) is stored innon-volatile memory on the client device (120). The configuration prompt(908) includes prompting text for display to a user that identifies theuser-provided configuration parameters necessary to configure the clientdevice. Examples of user-provided configuration parameters include auser's LAN mask, a user's IP default gateway address, a user's IPaddress, a user's LAN name, a user's DMS name, a users link type(Ethernet, Bluetooth, 802.11), wireless network name, wirelessencryption key, or any other user-provided configuration parameters thatwill occur to those of skill in the art.

In some examples of the method of FIG. 9, reading (906) a configurationprompt (908) from a client device (120) is carried out by services in anOSGi framework called by the generic configuration bundle (814). Thegeneric configuration bundle may call services from within the genericconfiguration bundle that are programmed specifically to read theconfiguration prompt from the client device. In alternative examples ofthe method of FIG. 9, the generic configuration bundle queries aservices registry on the framework to locate a service or set ofservices capable of reading the configuration prompt from the clientdevice.

The method of FIG. 9 includes providing (910) the configuration prompt(908) to a user (210). In some embodiments, providing the configurationprompt to the user is carried out by providing the prompt in text at acommand line prompt such as the one provided by the command “cmd.exe” inmodern versions of Microsoft Windows or any other text based prompt thatwill occur to those of skill in the art. In many embodiments, a servicesgateway according to the present invention has installed directly uponit no user interface hardware, such as a terminal screen, keyboard, ormouse. In such embodiments, providing the prompt to a user includescommunicating the prompt across a LAN to another client device such as apersonal computer or workstation having connected to it user interfacehardware such as a terminal screen, keyboard, mouse, and so on. That is,in many example embodiments of the method of FIG. 9, providing (910) theconfiguration prompt (908) to a user includes writing the configurationprompt (908) to a terminal screen on a computer (904) connected to theservices gateway (130) across a LAN (109).

In many examples of the method of FIG. 9, configuration prompts (908)stored on the client device (120) are text only prompts. As text only,the configuration prompts (908) are, in many cases, unfriendly orcomplicated to users unfamiliar with configuring the client device(120). In the method of FIG. 9, providing (910) the configuration prompt(908) to a user includes creating (870) a configuration screen (872) forthe configuration prompt (908) read from the client device (120). Theconfiguration screen (872) of the method of FIG. 9 is a user-friendlyGUI data entry screen designed to facilitate the user's entry ofuser-provided configuration parameters. In many examples of the methodof FIG. 9, multiple configuration screens (872) are created to walk theuser through the configuration process. In some examples of the methodof FIG. 9, creating (972) the configuration screens (872) includescreating the configuration screen as an HTML document and sending (876)the configuration prompt (908) to the user as an HTML document in anHTTP message.

In many embodiments where the services gateway has no user interfacehardware, the services gateway does support HTTP. In such embodiments, auser can access the HTML configuration screens (872) sent to the user asHTTP messages by logging on to a browser on a personal computer (904) asor other client device that does support user interface hardware and iscoupled to the services gateway through a LAN and directing the browserto the services gateway's IP address on the LAN.

In some examples of the method of FIG. 9, creating (870) theconfiguration screens is carried out by OSGi services contained withinthe generic configuration bundle (814). In alternative examples, thegeneric configuration bundle (814) queries a services registry on theframework to identify services useful in creating configuration screens(872).

The method of FIG. 9 also includes receiving (912) configurationparameters (914) from a user (210). In the method of FIG. 9, receiving(912) configuration parameters (914) from a user (210) comprisesreceiving an HTML document in an HTTP message. Using a web browserinstalled on a computer connected through a LAN to the services gateway,a user accesses the configuration screen (872) provided to the user andenters the user-provided configuration parameters. Examples ofuser-provided configuration parameters include a user's LAN mask, auser's IP default gateway address, a user's IP address, a user's LANname, a user's DMS name, a users link type (Ethernet, Bluetooth,802.11), wireless network name, wireless encryption key, or any otheruser-provided configuration parameters that will occur to those of skillin the art.

The method of FIG. 9 includes writing (916) the configuration parameters(914) to the client device (120). In some examples of the method of FIG.9, writing (916) the configuration parameters to the client device iscarried out by services in an OSGi framework. That is, in suchembodiments, the generic configuration bundle can query a servicesregistry in an OSGi framework to identify a service or set of servicescapable of writing the user-provided configuration parameters to theclient device.

It will be understood from the foregoing description that modificationsand changes may be made in various embodiments of the present inventionwithout departing from its true spirit. The descriptions in thisspecification are for purposes of illustration only and are not to beconstrued in a limiting sense. The scope of the present invention islimited only by the language of the following claims.

1. A method for configuring a client device, the method comprisingassociating a hook in a configuration bundle with customizedprogramming; downloading the configuration bundle for a client device toa services gateway, including downloading a generic configuration bundleto the services gateway; and executing the configuration bundle on theservices gateway, including calling the hook and executing the genericconfiguration bundle, wherein executing the generic configuration bundlefurther comprises: reading, from the client device, a configurationprompt stored on the client device, providing the configuration promptto a user, receiving configuration parameters from the user, and writingthe configuration parameters to the client device.
 2. The method ofclaim 1, wherein associating a hook in a configuration bundle withcustomized programming comprises receiving a description of the hookfrom a manufacturer.
 3. The method of claim 2, wherein associating ahook in a configuration bundle with customized programming comprisesintegrating the customized programming with the configuration bundlethrough the hook in dependence upon the description.
 4. The method ofclaim 1, further comprising detecting a client device and requesting aconfiguration bundle for the client device.
 5. The method of claim 1,further comprising receiving, at a vendor, the configuration bundle fora client device.
 6. The method of claim 5, further comprising receiving,at a vendor, user-provided configuration parameters for the clientdevice.
 7. The method of claim 6, further comprising associating theuser-provided configuration parameters with the configuration bundle. 8.The method of claim 1, further comprising receiving, at a configurationservices provider, a configuration bundle for a client device.
 9. Themethod of claim 8, further comprising receiving, at a configurationservices provider, user-provided configuration parameters for the clientdevice.
 10. The method of claim 9, further comprising associating theuser-provided configuration parameters with the configuration bundle.11. A system for configuring a client device, the system comprising: acomputer processor operatively coupled to computer memory, the computermemory comprising computer program instructions that, when executed bythe computer processor, cause the system to perform operationsincluding: associating a hook in a configuration bundle with customizedprogramming; downloading the configuration bundle for a client device toa services gateway, including downloading a generic configuration bundleto the services gateway; and executing the configuration bundle on theservices gateway, including calling the hook and executing the genericconfiguration bundle, wherein executing the generic configuration bundlefurther comprises: reading, from the client device, a configurationprompt stored on the client device, providing the configuration promptto a user, receiving configuration parameters from the user, and writingthe configuration parameters to the client device.
 12. The system ofclaim 11, wherein associating a hook in a configuration bundle withcustomized programming comprises receiving a description of the hookfrom a manufacturer.
 13. The system of claim 12, wherein associating ahook in a configuration bundle with customized programming comprisesintegrating the customized programming with the configuration bundlethrough the hook in dependence upon the description.
 14. The system ofclaim 11, further comprising computer program instructions, that whenexecuted by the computer processor, cause the system to performoperations including detecting a client device and requesting aconfiguration bundle for the client device.
 15. The system of claim 11,further comprising computer program instructions, that when executed bythe computer processor, cause the system to perform operations includingreceiving, at a vendor, the configuration bundle for a client device.16. The system of claim 15, further comprising computer programinstructions, that when executed by the computer processor, cause thesystem to perform operations including receiving, at a vendor,user-provided configuration parameters for the client device.
 17. Thesystem of claim 16, further comprising computer program instructions,that when executed by the computer processor, cause the system toperform operations including associating the user-provided configurationparameters with the configuration bundle.
 18. The system of claim 11,further comprising computer program instructions, that when executed bythe computer processor, cause the system to perform operations includingreceiving, at a configuration services provider, a configuration bundlefor a client device.
 19. The system of claim 18, further comprisingcomputer program instructions, that when executed by the computerprocessor, cause the system to perform operations including receiving,at a configuration services provider, user-provided configurationparameters for the client device.
 20. The system of claim 19, furthercomprising computer program instructions, that when executed by thecomputer processor, cause the system to perform operations includingassociating the user-provided configuration parameters with theconfiguration bundle.
 21. A computer program product for configuring aclient device, the computer program product comprising amachine-readable storage medium, the computer program product comprisingcomputer program instructions capable of: associating a hook in aconfiguration bundle with customized programming; downloading theconfiguration bundle for a client device to a services gateway,including downloading a generic configuration bundle to the servicesgateway; and executing the configuration bundle on the services gateway,including calling the hook and executing the generic configurationbundle, wherein executing the generic configuration bundle furthercomprises: reading, from the client device, a configuration promptstored on the client device, providing the configuration prompt to auser, receiving configuration parameters from the user, and writing theconfiguration parameters to the client device.
 22. The computer programproduct of claim 21, wherein associating a hook in a configurationbundle with customized programming comprises receiving a description ofthe hook from a manufacturer.
 23. The computer program product of claim22, wherein associating a hook in a configuration bundle with customizedprogramming comprises integrating the customized programming with theconfiguration bundle through the hook in dependence upon thedescription.
 24. The computer program product of claim 21, furthercomprising computer program instructions capable of detecting a clientdevice and requesting a configuration bundle for the client device. 25.The computer program product of claim 21, further comprising computerprogram instructions capable of receiving, at a vendor, theconfiguration bundle for a client device.
 26. The computer programproduct of claim 25, further comprising computer program instructionscapable of receiving, at a vendor, user-provided configurationparameters for the client device.
 27. The computer program product ofclaim 26, further comprising computer program instructions capable ofassociating the user-provided configuration parameters with theconfiguration bundle.
 28. The computer program product of claim 21,further comprising computer program instructions capable of receiving,at a configuration services provider, a configuration bundle for aclient device.
 29. The computer program product of claim 28, furthercomprising computer program instructions capable of receiving, at aconfiguration services provider, user-provided configuration parametersfor the client device.
 30. The computer program product of claim 29,further comprising computer program instructions capable of associatingthe user-provided configuration parameters with the configurationbundle.